Paso 7 (3)- Trayectorias de hospitalización y mortalidad con foco en condiciones vinculadas a trastornos de salud mental y consumo de sustancias posterior a un primer ingreso por alguno de estos trastornos, en usuarios/as jóvenes y adultos emergentes de población general y pertenecientes a pueblos originarios, 2018-2021, Chile
Análisis de sensibilidad para resolución mensual, utilizando aquella solución que obtuvo índices de calidad aceptables.
Autor/a
Andrés González Santa Cruz
Fecha de publicación
13 de may, 2025
Configurar
Código
# remover objetos y memoria utilizadarm(list=ls());gc()
used (Mb) gc trigger (Mb) max used (Mb)
Ncells 598383 32.0 1303655 69.7 686442 36.7
Vcells 1129253 8.7 8388608 64.0 1876026 14.4
#elegir repositorioif(Sys.info()["sysname"]=="Windows"){options(repos =c(CRAN ="https://cran.dcc.uchile.cl/"))}options(install.packages.check.source ="yes") # Chequea la fuente de los paquetes#borrar caché#system("fc-cache -f -v")#elegir repositorioif(Sys.info()["sysname"]=="Windows"){options(repos =c(CRAN ="https://cran.dcc.uchile.cl/"))}options(install.packages.check.source ="yes") # Chequea la fuente de los paquetes#borrar caché#system("fc-cache -f -v")if(!require(pacman)){install.packages("pacman");require(pacman)}pacman::p_unlock(lib.loc =.libPaths()) #para no tener problemas reinstalando paquetesif(Sys.info()["sysname"]=="Windows"){if (getRversion() !="4.4.1") { stop("Requiere versión de R 4.4.1. Actual: ", getRversion()) }}cat("quarto version: "); system("quarto --version")
2.1. Sensibilidad= PAM (OM), sol 2 cluster- diagnósticos
Código
invisible("Me da buena: 0,61 en promedio. Se mantiene. El problema está con 5710 es negativo")sil_pam_om_clus2_m_nostd<-silhouette(as.integer(pamRange_month_om$clustering$cluster2), as.dist(dist_month_om))# Crear etiquetas personalizadascluster_labels2_m <-paste0("Cluster ", seq_along(attr(summary(sil_pam_om_clus2_m_nostd)$clus.avg.widths, "dimnames")[[1]]), ":\nAWS ", sprintf("%1.2f",summary(sil_pam_om_clus2_m_nostd)$clus.avg.widths))# Graficar con etiquetas personalizadasfviz_silhouette( sil_pam_om_clus2_m_nostd, lab.clusters = cluster_labels2_m, # Etiquetas personalizadas para los clústeresprint.summary=F) +scale_fill_grey(start =0.2, end =0.8, labels = cluster_labels2_m) +# Escala de grisesscale_color_grey(start =0.2, end =0.8, labels = cluster_labels2_m)+# Escala de grises para los bordeaggtitle(NULL)+labs(y="Ancho medio de la silueta", x="Conglomerados")# Elimina el título
# Crear la tabla de frecuencias proporcionales redondeadatabla_proporciones2 <-round(prop.table(table(pamRange_month_om$clustering$cluster2, pamRange_quarter_om$clustering$cluster4), 2), 2)# Convertir la tabla a un formato limpio con kableknitr::kable(tabla_proporciones2, caption ="Proporciones de Clusters, Solución de 2 vs. 4 conglomerados", col.names =c("5939, Un semestre TSM(1)", "5989, Comorbilidad un trimestre(2)", "6025, Un trimestre, TUS(3)", "6035, Un trimestre, TSM(4)"), align ="c")
Proporciones de Clusters, Solución de 2 vs. 4 conglomerados
5939, Un semestre TSM(1)
5989, Comorbilidad un trimestre(2)
6025, Un trimestre, TUS(3)
6035, Un trimestre, TSM(4)
6612
0.01
0.07
1
0
6623
0.99
0.93
0
1
Código
tabla_conteo2 <-table(pamRange_quarter_om$clustering$cluster2, pamRange_quarter_om$clustering$cluster4)# Proporción por filatabla_prop_fila2 <-prop.table(tabla_conteo2, 1)# Proporción por columnatabla_prop_col2 <-prop.table(tabla_conteo2, 2)# Redondear ambastabla_prop_fila2 <-sprintf("%1.1f", tabla_prop_fila2*100)tabla_prop_col2 <-sprintf("%1.1f", tabla_prop_col2*100)# Combinar ambas proporciones en el formato "fila / col"tabla_combinada2 <-matrix(paste0(tabla_prop_fila2, " / ", tabla_prop_col2),nrow =nrow(tabla_conteo2),ncol =ncol(tabla_conteo2),dimnames =dimnames(tabla_conteo2))# Convertir la tabla a un formato limpio con kabletabla_combinada2 |>kable(caption ="Proporciones de Clusters (por fila / por columna), Solución de 6 vs. 4 conglomerados", col.names =c("6522, Un semestre TSM(2)", "6574, Comorbilidad un trimestre(3)", "6612, Un trimestre, TUS(4)", "6623, Un trimestre, TSM(4)"), align ="c" ) |>kable_classic() |>footnote(general ="6612= Primer mes, TUS; 6623= Primer mes, TSM",general_title ="Nota:",footnote_as_chunk =TRUE,escape =FALSE )
Proporciones de Clusters (por fila / por columna), Solución de 6 vs. 4 conglomerados
6522, Un semestre TSM(2)
6574, Comorbilidad un trimestre(3)
6612, Un trimestre, TUS(4)
6623, Un trimestre, TSM(4)
6612
0.3 / 0.5
0.8 / 2.6
98.9 / 100.0
0.0 / 0.0
6623
6.8 / 99.5
3.8 / 97.4
0.0 / 0.0
89.4 / 100.0
Nota: 6612= Primer mes, TUS; 6623= Primer mes, TSM
Generamos un gráfico de PPOO por cada conglomerado.
Código
# 2025-05-03: cambiar etiquetas de los dos gruposlevels(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2) <-sub("Un trimestre", "Primer mes", levels(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2))levels(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2) <-sub("TSM\\(1\\)", "TUS(1)", levels(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2))#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_ppoo_clus_pre_pam_om2_m<- df_filled2[,c("run","glosa_pueblo_originario")]|> dplyr::left_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om2")], by="run", multiple="first")|> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "ci_cya_conadi", "ppoo_minsal_y_rsh_2010")], by="run", multiple="first")|> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario =="NINGUNO"& (ci_cya_conadi ==1| ppoo_minsal_y_rsh_2010==1)~"DESCONOCIDO", T~glosa_pueblo_originario)) |> janitor::tabyl(glosa_pueblo_originario_rec, clus_pam_om2) |> janitor::adorn_percentages("row")#0 pacientes en cluster TUS YAGÁN (YÁMANA), AYMARA, COLLA, DIAGUITA, KAWÉSQAR; #Pocos pacientes en cluster TUS: OTRO=2, RAPA NUI= 5#Pocos pacientes en TSM: YAGAN=2, DIAGUITA=3, KAWESQAR=4invisible("2025-05-03")cat("Sólo RAPA NUI y MAPUCHE (ver por RUN, al menos una observación que se identifique RAPA NUI o MAPUCHE)\n")ppoo_clus_pre_pam_om2_m_act<- df_filled2[,c("run","glosa_pueblo_originario")]|> dplyr::left_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om2")], by="run", multiple="first")|> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "ci_cya_conadi", "ppoo_minsal_y_rsh_2010")], by="run", multiple="first")|> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario =="NINGUNO"& (ci_cya_conadi ==1| ppoo_minsal_y_rsh_2010==1)~"DESCONOCIDO", T~glosa_pueblo_originario)) |>group_by(run, clus_pam_om2)|>summarise(sum_ppoo=sum(grepl("RAPA|MAPU", glosa_pueblo_originario_rec)), .groups="drop")|>ungroup()|>mutate(sum_bin_ppo=ifelse(sum_ppoo>0, 1, 0))|> janitor::tabyl(sum_bin_ppo, clus_pam_om2)janitor::chisq.test((ppoo_clus_pre_pam_om2_m_act))#X-squared = 4.2837, df = 1, p-value = 0.03848 # ES SIGNIFICATIVO!, x2 OR de pertenecer a uno de estos pueblos en TUS; 1.5 veces la prevalenciacat("Sólo RAPA NUI (ver por RUN, al menos una observación que se identifique RAPA NUI)\n") #NO SIGNIFICATIVOppoo_clus_pre_pam_om2_m_rapa<- df_filled2[,c("run","glosa_pueblo_originario")]|> dplyr::left_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om2")], by="run", multiple="first")|> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "ci_cya_conadi", "ppoo_minsal_y_rsh_2010")], by="run", multiple="first")|> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario =="NINGUNO"& (ci_cya_conadi ==1| ppoo_minsal_y_rsh_2010==1)~"DESCONOCIDO", T~glosa_pueblo_originario))|>group_by(run, clus_pam_om2)|>summarise(sum_ppoo=sum(grepl("RAPA", glosa_pueblo_originario_rec)), .groups="drop")|>ungroup()|>mutate(sum_bin_ppo=ifelse(sum_ppoo>0, 1, 0))|> janitor::tabyl(sum_bin_ppo, clus_pam_om2)janitor::fisher.test((ppoo_clus_pre_pam_om2_m_rapa))#p-value = 0.3708#OR: 1.694165 cat("son 11 casos!\n")cat("Clasificando por Mapuche, otro no-mapuche, ninguno puro y desconocido puro")ppoo_clus_pre_pam_om2_m_clasificaciones<-df_filled2[, c("run", "glosa_pueblo_originario")]|> dplyr::left_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om2")], by="run", multiple="first")|> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "ci_cya_conadi", "ppoo_minsal_y_rsh_2010")], by="run", multiple="first")|>mutate(glosa_pueblo_originario_rec =if_else( glosa_pueblo_originario =="NINGUNO"& (ci_cya_conadi ==1| ppoo_minsal_y_rsh_2010==1), "DESCONOCIDO", glosa_pueblo_originario ))|>group_by(run, clus_pam_om2)|>summarise(tiene_otro_po =any(grepl("AYMARA|COLLA|DIAGUITA|KAWÉSQAR|RAPA NUI|YAGÁN|OTRO", glosa_pueblo_originario_rec)),tiene_mapuche =any(grepl("MAPUCHE", glosa_pueblo_originario_rec)),tiene_ninguno =any(glosa_pueblo_originario_rec =="NINGUNO"),tiene_desconocido =any(glosa_pueblo_originario_rec =="DESCONOCIDO"),.groups ="drop" ) |>mutate(clas_por_run =case_when( tiene_mapuche ~"Mapuche",!tiene_mapuche & tiene_otro_po ~"Otros reportados (no mapuche)", tiene_ninguno &!tiene_otro_po &!tiene_mapuche ~"Ninguno puro", tiene_desconocido &!tiene_ninguno &!tiene_otro_po &!tiene_mapuche ~"Desconocido puro", T~NA_character_ )) |> janitor::tabyl(clas_por_run, clus_pam_om2, show_na = T)janitor::adorn_percentages(ppoo_clus_pre_pam_om4_q_clasificaciones, "col")|>mutate_if(is.numeric, ~round(.*100, 1)) |>mutate(clas_por_run=factor(clas_por_run, levels=c("Ninguno puro", "Desconocido puro", "Otros reportados (no mapuche)", "Mapuche")))|>arrange(clas_por_run)|> (\(df) {if (interactive()) {df|> rio::export("clipboard")} knitr::kable(df, caption="Porcentajes por columna, conglomerado vs. PPOO") })()janitor::fisher.test(ppoo_clus_pre_pam_om2_m_clasificaciones, simulate.p.value=T, B=1e5)#p-value = 0.001chisq.posthoc.test(ppoo_clus_pre_pam_om2_m_clasificaciones[,2:3],simulate.p.value=T, B=1e5)|> (\(df) { dplyr::mutate_at(df, 3:ncol(df), ~round(as.numeric(gsub("\\*", "", .)), 3)) })()|>group_by(Dimension)|> (\(df) { summarise(df, across(2:(ncol(df)-1), ~paste0(first(sprintf("%1.2f", .)), " (p=", last(sprintf("%1.3f", .)), ")"))) })()|> (\(df) { dplyr::mutate_at(df, 2:length(names(df)), ~gsub("p\\=0.000)", "p<0.001)", .)) })()|>mutate(Dimension= ppoo_clus_pre_pam_om4_q_clasificaciones[,1]) |>mutate(Dimension=factor(Dimension, levels=c("Ninguno puro", "Desconocido puro", "Otros reportados (no mapuche)", "Mapuche"))) |>arrange(Dimension) |>mutate(Dimension=as.character(Dimension)) |> knitr::kable("markdown", caption ="Comparación post-hoc, conglomerado-PPOO autorreporte")cat("Tampoco resulta significativo en https://adaptivedesignstrial.shinyapps.io/posthoc/\n")invisible("Otros reportados (no mapuche) pertenecen menos Primer mes TUS(1); The Bonferroni corrected significant level for Exact approach is: 0.05/(R*C)=0.00625; pero no habia nada destacado en verde o amarillo")invisible("pvalue based on Adjusted residual y pvalue based on exact approach, son significativos al 0.01 par Otros reportados y baja pertenencia TUS; pero no hay yellow or green are significant based on the exact approach under the Holm-Bonferroni correction.")invisible("0.04 tiene los pvalues basados en residuos ajustados y pvalues basados en la aproximación exacta , en el que Mapuches tienen más proporción TUS")invisible("0.05 tiene los pvalues basados en residuos ajustados y pvalues basados en la aproximación exacta , en el que Desconocido puro tienen más proporción TUS")invisible("Los desconocido puro son quienes tienen i_cya_conadi ==1 | ppoo_minsal_y_rsh_2010==1, es decir, históricamente son reconocidos o se han autoidentificado, pero no en MINSAL (que es el que registra la mierdita)")#####::::::::::::::::::::::::::::::::::::::::::::::::::::::#####::::::::::::::::::::::::::::::::::::::::::::::::::::::#####::::::::::::::::::::::::::::::::::::::::::::::::::::::cat("Ahora descartando ASWs negativos")run_aws_neg_m_c2<-c("01a17af6c7b8aaba09226eff980bda2c6257c7a830e6be8e853a67743070c779", "05f17cc6fc0a8e7e45687470ce81ac223f92c6c4320e2cc293d3fa853d1d4478", "06129e059d0ef701be2ae0ff8b4c1f604fe2286efc1b05db190b7844a3cb4879", "0c1ed1bb2ff17afe1bd9ccc41f3a3028750a6549a056ab657a8be5d231ca1452", "0c8f79a7c405104ce14e8d7b31dcc6fb70248fd6ae7de55a642d30eb12d86721", "10f8b961d7cbff7cec8e4396f7a3936e54251b78c82c6ce15c84398ded89d845", "143139a49434bcf76fdc0cb3d94decc1070e4d229351c0a49e19bb4dc5ae4d6e", "156fb1388cc49601df8d578e6d2c04ef52a9908cb5dc5c1392d4a726223c1fa3", "15e3dd4ec5b6fe40be3c8ca7b1bfc648c502d6a4488bd65091e32c751c747872", "15ebcf907feeff230ced69bc57cff0b53c02af27aeb552fedf80e40e7d3b8639", "16d0fda9b29b8afa26be40a49accfd7ecc0eb8f4e41d7b0ec4e5cb791ca23622", "19e0e606397d62e5b9d4d71797877302588c7e17c46b1ed4b9712f11910b9677", "1c45c5a100a9bf4bf31d48c1794295388f766a1d6916c69d0e8bf748843d37ad", "1caba8fbe7076a293a2ae24160ddd627b6a89aea6271cc13f1b9c4f9f48b1b54", "1dd360fb4101d4f4b78162344d80b257c745d2eb81d57f96526a29948b31864c", "1f786ae1dcea0aebc6339e03176f644a248660bae766fa651f4d4f6bf0eb3c0e", "2059f8a5b4ff2fca074ec1e0b549dcccde4231e77a51943b4bac770ea1c70439", "21d49f5e2ead538e7802f5854106dc7da7f200f538d13100bad8e9be9da99317", "22d8751072f17d01fed159cf7b26d0128fcae823732b484a3409593e508a0321", "22d8a99fb68720cceb1f5c342017e3298f37c2e3d120b0f7a63d67216b0d501c", "22f44ce402659a7c087bf0b04b38480e8ec81f727905cae84db4897ffa5979c8", "230c3cab3cd1233bdcdf1785f4692c143a5be5fde7963198cfa2d74fc7d9c606", "2421e8fa7063ed95cfc14a295e2254e14aa5ca1e8fba117c5f4f27dad65cef18", "26f6e597bba2f2f1cc4e0d505e0fe7f16ad77271fd911b582b6350a4510a2eb1", "292bf9d2c3ee37eb4d413f23f12507e5871d47548cb72dff9f1a211b10679e32", "29b4c8366efb3e73bc76ffa8aa52013eb8160c98a18e1997aa906a05a15c4786", "2aeaebb41eaabceca08746649ab149f5c68b4b5b96a281159f10e0a967bb39af", "2ce4ba1cf5aa79249648246ffdfe46fdd8a42be8ec368dfc7989a89616ef3c26", "2e0a7bda343db6684115241dcf018dc6b1d16d563614f9e45c330567bc128fa1", "2e254b89d0d17b898d8f05bd84c2b982b346ba6241d41413686a79ab7d8da1fe", "3166a179de48204cfebd1cd70ad0d1f0d42769b93d2d72a0ad25a740aaa8da9f", "3492ba15e342e0665e53bbddc3738c7d2836ba13be3f4e4e41d9128778cce6fe", "368ca29d3ff7b234eb4b866b396367d5bad9ae8e71ee8737b351d057bdf2e632", "36b56876b006273d34b566c67508c488e49b429742c647bacc3ce55069af9d66", "3a091a12d80b1a9dd1d916af41fd1c74c168a27c4e7ef74a85a8b97e6b1c57f3", "3a25c7e1145e49c50a440bedd7ad4273b180e14b34089caced81791bcb757ab8", "3afc4fe7fb1fdc9f96b2087d12e899ac80746a8e5afa51e309c5ee2cae102cc6", "3be4f2bd0c5d99dca82fa9ef55e1a5447fa4fb006e8be90215e5bd2c2f838cf6", "3c8bcf4ce37c348517d1e1ac7d986e6993f46bfc1ef7cdc0aeca5bce164a5ed1", "3ca6ed74da619be17d401d14d312c569156c6550894cbbdc3d338741f8559132", "3d8f675f1890ceffd21688dcc6ef98cec729213c79759e4c80a33cc7ed54f6f6", "3da296dc5ba0010d3df89941771309126309d349f599b6caf8a9bb705820706f", "3ddcc03d81232fd0126f78c5cbcbc17e6898ec064a9944d7d7b28bee7ca0d878", "409a41987274a15c204602c5ae18e42b9a1c4b74fa434ee7a0d228f1c9794f65", "416e87167b7df7aac0b1d19b44aaae6f374f8d506ec54364b0c97b074458a0a8", "44c4aee40a12fd4fce4aa87febd8dbd689f06bb26e7700c492d9f728ef624ee1", "479e86260a31a04b61f1d284e0541fd8096b38c22fd18a19f070efe7adaa179d", "47d5637afbc09a7387de64c4a3050ef9d21d23928149c54955a7f08b101748e8", "49ef0e2104adc5dcfd59ec8cf539bc3d0922cdc769869209b91555e8fec7d349", "4a567ac55bd296932c89913914a01dc16d3ed3ca419680cf859829b4ec5ec662", "4dc72b4b0c1e89d0b20894f67716d8a71dad092188c7627965f5d5314126972c", "4ddc8ad0c1f28a2a878474c7187d89e5ae02ac4bea0c12bcabae9901ca18e461", "4fcdd8befe66235c0e8792eb6980e2880b7abd0123fedafa75eaa47903852796", "5048772db5bb399ef14140215c71b7d060ddf0c368261ad260ecb96d5def802b", "50cf272a7ff1fbdadafd85e67cdcf979c0d1e22a6f5d505831cbce39a189fa74", "51af67533d59abea5602b34ad1764b1bcd44b5e4f510a7b7ea45482b25417632", "51f2ccf8d5621a7cc4048311d393d406cae4ef26307a1397acd0993517a02187", "5344250ae4bca7ff8164e53d9fbebd674ed2af30c217b344a569bf65a45a5d99", "53ca44ea202c15fb2dfe6ab815871436ac61e22b9264e6d236ac2841a9ff1bcb", "54766fa4be2866c8f8397bac771aafbfc7106db476ede2c0ddb7d648c7f8856a", "5757d73e17118586df3e6d60cbf2315ff1dc688d2685e5f07845c4b56f44b6ba", "5799dab6dd3325039744fe0b81ac128a3d697cc8d14586d43fc20a8d6049c636", "59281d00f707101af80165dd97a302d9b38bb6fa8a3d1afdd8e31d7d9c08c1b6", "5a6e4d1a6de8d1e4c43745406fb9c6689c9357d56d47fc4e1ccc826d4ab9001e", "5a92ed01346a9de008b7943d29d788c8bf95d57a5368ebb60629b0436cd24b7d", "5aa79e26e86d5d074f65aee2feffae7050f61b2daaa5b01920678181d576a194", "5aebfd0f6d18cb695982fd71e8705202e42c911a0df79a49c47b8fa08176a342", "5debf54063b68f64901b1559dcc0dec09670ec76aaaa858131eabc2392c40976", "63418ab30d9d557d742edd44583364ac4c5e5fc15dc1863d07bb366e519d46e3", "63b6b54d0c1484867a0a72b641204bd10b945455621e573994135cf6377c3389", "63f9dabe4f2e0f664868de6fe7f9ce2443db7443f24021caf1b2cda06801b7cc", "652505448c9c38076c682ecee925063cd45bbe4ad6ec2c96f2ed4a99c7f006c3", "659c340280b4ae53640409046d6ba0e142dca124f2bd6c638c8324cf2d1b0838", "66765342c59d7f1a7aa729931b0f2af72cc0b71358ea7cdd3e8f39ed2294132b", "674726d192962840463fa4e47b530d5bee584c28c7a3331e0acda8c3ad0ddc1a", "67b8ffacc05bb4cd3cf2585db0ba0bdefc13bea93cbb2bace4aa14379890fb46", "6b035600c102b263e898e7c25d55c4b14cb821f45370220611c0788231160b4f", "6b32287b7a1bb2b079c9a5946a3f337e4caba4a78022903a9af5b66848792b29", "716cf8d45a14e56ed0d7c63b85d60ec6baced3e7c43e6a189a8b18a2be3e9f49", "73df60635de4da05addd6ea3c8a0cf3be1ca410668a63ec057693057da367c93", "751a72c5f71efe03adec5375c23a2b91ed3cdbacb7c8466320809f853abb59e6", "76c1f705d7125d55924c2ac4dae07abe911d0ffb4f5ca2e1d27a2f2186f3a071", "77183427f0d48323dc6aaf1105877b92e3bd3d4e736bc77abd8e87cff266e0c3", "7c83acf859263509d2dbbe0f07cb90266cd8d184ff88c83c972684af20354284", "80026dac5038bb76d5c75f500aeb807d439ca6a333146e6d7d117c4781a34089", "82e69c3dd8fef335b86b4f4fbe25a1ac27d48e5ad0d00dcc8d33f2282bb38b25", "8319a9336b81f76e5942fa232aeda15b14beb16a8fe62ce9dda66eca86cd6b03", "859fd8521edb09fdb970e21bc3cee040735ac3b94c2a51c825b8798f8236fd54", "863eb19ffe85217ac8efc5dd0c32b4c6c28f639f9bad2c84796823b7a5fb2637", "8701cc9de4d6ab0afcebb1767dd0d4a434906f6f66092ec5aa764aaa4486cc8a", "882f02585925ee6aba9966556552b591760f11f61201b74254bb8ce3fa1a91aa", "88c9c1ae45655c4505bbf37d9f17ba81674693e616227618ccd25ecced2fc397", "8a3d27b60ce1b1575b5f0de528d28b8a9c1ef7db799fa30881d1ff360f03e59a", "8b0c786a1703274bbcfe1a9f20f24b4411a49d2a9677682a0328b4fa81d02ebd", "8b36fc2862259034358f3b8432a70f031295015b6975ed83a20d7d1d8ac2f681", "8b8905a4f27dfe7c31585af78b3edc76941f450b914587dcde88830dcabeefa8", "8c45df956595ccb4e7f145d2cd34c82f816bec8b16b3e619d89ef5dcc7c70b93", "8ce465fe751f82c9d7908adae36e1ad97bb1f33b11373b3e8dd50ae0cffa8de6", "8d61df117050a2d45dc4a8d541ee5d4ffaf2e012584ea6c1fbe2ea94ef65d04f", "8db2e83fa9536bfe12586b88f3e344b9543096adc22bb8963263c4c30e8f1d7e", "8fa7b87093d30ea3298e257f8517d54460521ae583b3e4aa554708f010215614", "8ff4881771d6191d46d9ea46503e1f8515b4c437ea67adcbf12142258c432dd9", "9202884dded8b014d48101bd97aa6d80cec743c2437e5d4496158b2d13a19db8", "9794134dbbadc4c9802f77001b5357269d3df4c290a565f2d0b108c45abfce65", "97ac376fb9099cef6fabf948ca563ce5e70dbbff820897b53689a284910b0fb4", "981993c0fe52ed2c38380732392e8894452c0dae55d8e11cd458ecc7b8a45f4d", "982db16ab13704550b10d584334df5914c4fe5309a10211f3c25672f7200cb87", "987a14457dbc6a9a397ab46c82005b718c7dd8b10a6c3d7d8dc300e79c30732c", "9b078aa545e9a862f895d372b25b2fd7ea5550217b83d45e0ad91b7b969db31f", "a0eb91edd5daf7b2576f8eb3109a60ccb1f0280a5afcc19659bd6547efc5979d", "a258265be5f7f2ab78c3bbb9946f3713188bd6ef844bf96f5eac5429679036ca", "a294f117b9c905203baabd164efa30d3e6a2929446899a52c426ad35f67c7eb7", "a2b192de8292bd2f65cbaed42be122fc36272b0228ef3bce8c5f33ea8ed437cb", "a5a2cf6332da3bd1cc79c936cbbdd3de9b0d576f17ff6fbdaaafe896e9e88ca2", "a67a66b3e385611d077166b652bff025a8a4ecc5569e34bb6856d3dca2919fa8", "a878587878c3de4df64fba2209420097a7db38d9d41537695255463bc428fe4e", "a8c7b71fcff0f08f34160f3296c27d59fbfb808a67c2ec437b34e9d967668b5b", "a9c7c1b0c03849e605533aee147c0c2c5c456641ece164f9ac69cf9aacfeefa1", "ab3ae8dc4b3ae0be7df1dfdb703b72ea21a5f2ae0e6b947088b0f62e10567d70", "ac794c50715c2b2685f5ae8ba0f4cbc3d953fa19a5c86c7ec54a2451d7236c71", "af42d9d175547bba724f0708e8ff5919499c88e5527368d70135b2c3e828cba5", "b005ddbf6bfb6efe4cc1aaac8d72fbd3c68881e6a026c715cf1be70f6c70cf05", "b22ce16967b23f36e05ff814819418b6d3c8712ab1cc8c8d3377f72bd0d6af5b", "b3f9c8efcb7f9c0979235c66474113954848ada89a5f28442a6023554aaf3f12", "b4bba02cc28643c9c7405e9810deee792d08453215c78f9010a1ce79edff2e71", "b4fb1ac1cf75428a3a68b12ba48170ecae66e5b55658b8178b999c5b29d66c57", "b5dde7c32a5ce6432d6beecf3f2487ff891a69f89227679e04bffd7b435ef091", "b612a5ea4d3dcc69487906f396eed3046f433e90005d44c36b055ff11f602646", "b612bbafdb837896522c3d865091d0f15d3e5d2ad938d003361d18077e48e0a6", "b8c5ed0b7f7910ed05899dc929f7e7e1063f03f7782e09b7b39103b3f5f85acb", "bc266e810557e3e8023c2d583437921cd51a04c02f0032c69cb147e583661dd6", "beb8ab9ac10c8f534da7c9828037a8b7447b1c347a9d54737505f95ce22ddf21", "c0969d9d9fdd99fa58c4f347d7888738fd8f7a8313ba541557f450bf7449dce9", "c14bd9b31f1380e4d4e8e89c1d9000b5b52f67265f003b320dfb067228217b2d", "c3b5a8c1f1a72937047a741f53e0ea82054716c58d456b8a31d446bf757f672c", "c6c9188f2e68dfb65abad9b8e3a9715b4f067eb038e9350c6988b6ed49b49c66", "c72545e70eae8df1378e03264a71dc31ed17e693be7c1ae970865154ceeb6a15", "ca81226f53a7cdcc92fe4658a4ae3fafceebdfe17d7dcaf56fc1b992d2d8af53", "cabf2cbc8e1235c8d1885345cc9735263ab91531f2ca9a114a5e29fa7723bb5b", "cc2ccaba0be871525c840b58ef6cf8978ebeb113fada80af4e4f2bc24b8a9faf", "d05204d028979e7fce9420fb9157dd68152714ee1b54cf5ccaef0791461bc2b2", "d0f4b17e80dacf858a18f8751a560ca11076474e6da7f5ff1dcd023e8b9009ca", "d25db5c721797cb9b945dea5ef68fe8ca05c3f049801f1ba86706928a3afd992", "d639aafb7d0d19aed977cda8aaffa1544f7d9d246fd4855edf3cf4e5c60e411c", "d71b4d52b5bba45afaffc84266cd7c7880699f1b4c2c5b4a597985401699eb65", "d856a4924f9ddf174c6838b49c5e655b245681df8974fa8aed9797a5d8f7dbac", "d875b9c8a8ca2c0a901e32fc88c2cf2d5bbabddcb92a3579a9d1112176c06aac", "d977bea926a9a1a7a5dba6bc5b103b182606fea484e46ee7a449b8924e3b66a6", "d9d7451829ec38ca26b30373c4627f5d1d1588f363063b588b7f56523599e748", "da7afe33b380af5b490f77635c67a1000117575411c5f214b01a5cafd5520d98", "db701e9598a812dada990afbd489e8c9fa5ec71fd06232cf46dd97a75acf5bcf", "db851fb46fce284c2bc92a3710e767e955978b314d43ba123aa61260e430dfd5", "de210239948e447535998711e3fed8ec4a0ad63e2e785822a79e9bd67f2c46ed", "de83dc2c6de928fb609c97afe55ab09a1c434818476a28a8c44550254799eea9", "e1e3160e88450628aa76c4753259f327242df5a2e5809f9709ff70a70ff7b35f", "e574bbb5b38a22517a61f2605bb75c90fd7273b683890cf13b6612c2feb620ac", "e6302300219b7cc58f914c383206e240f8e07b166c57a92b47daa9fac516a4f2", "eb13b3e02db36ff1d73dcea51120834b1807e48fc64b322fbb50573bb7d736a5", "eb589c54ee9b571f8ad0b77d9fc8271e3c91ad3238356936d691c827716625e5", "ec55dd923483772d1b47417fb846ff4d6d695a5bc66c300cb748492a1b63956d", "ec824852c20916ca206cff722c3b9f07d3c34ff46d5e29e233735348cc9ed8a2", "ed0ae1a8c793c39134dca6625ec44839349e669e43f7492973b67f79e68184f1", "eee431466a3f084d7121812e4d5365c545122b214fb8c4b3dffa21fcc0660d2c", "f3bf6d46b1c7bfb92019e7e12528614bcd16d74e1eb6c2d9b052fea961041a83", "f3e7c69e13e91fb61c68008ba3ae3296056945748821f8bff7b3ac3da668bb72", "f42baf781aced50f5e3af8c93b0024dfc67c9b64fc69a7477bdcbb973de38aeb", "fb568c71e4a454b73217e6b314aea4ff9e8f146801307e886722383b760f1ee3", "fc4fea2a86852f5056910d4dca50dcfb3b68c084ecacc9180879b788e599bcc3", "fcc69a0efcecaf2536490389a424da8ab2a6d1f95639b287419d66810a9b29f1", "fdda0db48ea9ef00687c3c8b5a6c77f25b05bfe7049cea2dd823a877c298f83b", "fe00a8a871cb190708a7f4b405c527e2668ae27c666c0b57de975c286e252700")ppoo_clus_pre_pam_om2_m_clasificaciones_sin_asw_neg<-df_filled2[, c("run", "glosa_pueblo_originario")]|> dplyr::left_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om2")], by="run", multiple="first")|> dplyr::left_join(ing_dt_ing_calendar_quarter_t_desde_primera_adm_dedup_wide2_cens[,c("run", "ci_cya_conadi", "ppoo_minsal_y_rsh_2010")], by="run", multiple="first")|>mutate(glosa_pueblo_originario_rec =if_else( glosa_pueblo_originario =="NINGUNO"& (ci_cya_conadi ==1| ppoo_minsal_y_rsh_2010==1), "DESCONOCIDO", glosa_pueblo_originario )) |>filter(!run %in% run_aws_neg_m_c2) |>group_by(run, clus_pam_om2) |>summarise(tiene_otro_po =any(grepl("AYMARA|COLLA|DIAGUITA|KAWÉSQAR|RAPA NUI|YAGÁN|OTRO", glosa_pueblo_originario_rec)),tiene_mapuche =any(grepl("MAPUCHE", glosa_pueblo_originario_rec)),tiene_ninguno =any(glosa_pueblo_originario_rec =="NINGUNO"),tiene_desconocido =any(glosa_pueblo_originario_rec =="DESCONOCIDO"),.groups ="drop" ) |>mutate(clas_por_run =case_when( tiene_mapuche ~"Mapuche",!tiene_mapuche & tiene_otro_po ~"Otros reportados (no mapuche)", tiene_ninguno &!tiene_otro_po &!tiene_mapuche ~"Ninguno puro", tiene_desconocido &!tiene_ninguno &!tiene_otro_po &!tiene_mapuche ~"Desconocido puro", T~NA_character_ )) |> janitor::tabyl(clas_por_run, clus_pam_om2, show_na = T)janitor::adorn_percentages(ppoo_clus_pre_pam_om2_m_clasificaciones_sin_asw_neg, "row") |>mutate_if(is.numeric, ~round(.*100, 1)) |> knitr::kable("markdown", caption="Otra forma de clasificación PPOO con reporte vs. conglomerados (por fila) (excluye ASW neg)")cat("Fisher test (menos los -ASWs)\n")janitor::fisher.test(ppoo_clus_pre_pam_om2_m_clasificaciones_sin_asw_neg, simulate.p.value=T, B=1e5)#p-value = 0.00086invisible("The Bonferroni corrected significant level for Exact approach is: 0.05/(R*C)=0.00625")invisible("Para Otros reportados (no mapuche) p-value 0.01 en basado en residuo estandarizado, ajustado, y en la aproximación exacta, menor en TUS")invisible("Para Mapuche p-value 0.03-0.05 en basado en aproximación exacta, residuo ajustado y estandarizado, respectivamente, de que es más alto proporción en TUS")#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:#:ppoo_clus_pre_pam_om2_m<- df_filled2[,c("run","glosa_pueblo_originario")]|> dplyr::left_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[,c("run", "clus_pam_om2","factor_inclusivo_real_hist_mas_autperc")], by="run", multiple="first")|> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::case_when(glosa_pueblo_originario=="NINGUNO"& factor_inclusivo_real_hist_mas_autperc!="00"~"DESCONOCIDO", T~glosa_pueblo_originario))|> janitor::tabyl(glosa_pueblo_originario_rec, clus_pam_om2)|> janitor::adorn_percentages("row")#scale_fill_manual(values = rev(c("#D2B48C", "#E27A5B", "#708090", "#6B8E23", "#506070" , "#2F4F4F", "#20B2AA"))) +reshape2::melt(ppoo_clus_pre_pam_om2_m, id.vars ="glosa_pueblo_originario_rec")|> dplyr::mutate(glosa_pueblo_originario_rec= dplyr::recode(glosa_pueblo_originario_rec, "OTRO (ESPECIFICAR)"="OTRO(n=77)", "RAPA NUI (PASCUENSE)"="RAPA NUI(n=34)", "YAGÁN (YÁMANA)"="YAGÁN(n=2)","AYMARA"="AYMARA(n=13)","COLLA"="COLLA(n=6)","DIAGUITA"="DIAGUITA(n=3)","KAWÉSQAR"="KAWÉSQAR(n=4)","MAPUCHE"="MAPUCHE(n=255)","DESCONOCIDO"=".DESCONOCIDO(n=1.985)","NINGUNO"=".NINGUNO(n=9.156)"))|>ggplot(aes(x = glosa_pueblo_originario_rec, y = value, fill = variable)) +geom_bar(stat ="identity", position ="fill") +scale_fill_manual(values =c(#, al menos un TSM(2)"6623, Primer mes, TSM y Comorbilidad(2)"="#D2B48C", "6612, Primer mes TUS(1)"="#E27A5B")) +labs(title =NULL,x ="Grupo Étnico",y ="Proporción de Casos",fill ="Grupos") +# Cambia el título de la leyenda a "Grupos"theme_minimal() +theme(axis.text.y =element_text(size =12), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =12), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =14), # Tamaño del título del eje Xaxis.title.y =element_text(size =14), # Tamaño del título del eje Yplot.title =NULL, # Tamaño y estilo del título del gráficolegend.title =element_text(size =14, margin =margin(b =-.1)), # Tamaño del título de la leyendalegend.spacing.y =unit(1.5, "lines"),legend.box.spacing =unit(0.5, "lines"), # Controla el espacio entre la leyenda y el gráficolegend.margin =margin(5, 5, 5, 5), legend.key.height =unit(1, "cm"), legend.text =element_text(size =12) # Tamaño del texto de la leyenda ) +coord_flip() # Hacer el gráfico horizontalggsave("_figs/grafico_ancho_achatado_pam_om2_m_25.png", width =10, height =5, dpi=1000)
Sólo RAPA NUI y MAPUCHE (ver por RUN, al menos una observación que se identifique RAPA NUI o MAPUCHE)
Pearson's Chi-squared test with Yates' continuity correction
data: (ppoo_clus_pre_pam_om2_m_act)
X-squared = 4.2837, df = 1, p-value = 0.03848
Sólo RAPA NUI (ver por RUN, al menos una observación que se identifique RAPA NUI)
Fisher's Exact Test for Count Data
data: (ppoo_clus_pre_pam_om2_m_rapa)
p-value = 0.3708
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
0.1777951 8.2063651
sample estimates:
odds ratio
1.694165
son 11 casos!
Clasificando por Mapuche, otro no-mapuche, ninguno puro y desconocido puro
Porcentajes por columna, conglomerado vs. PPOO
clas_por_run
6623, Un trimestre, TSM(4)
6612, Un trimestre, TUS(3)
6522, Un semestre TSM(1)
6574, Comorbilidad un trimestre(2)
Ninguno puro
80.2
77.7
82.0
83.4
Desconocido puro
15.5
18.0
12.5
13.1
Otros reportados (no mapuche)
1.8
0.5
2.5
0.9
Mapuche
2.5
3.7
3.0
2.6
PPOO por cluster
Fisher's Exact Test for Count Data with simulated p-value (based on
1e+05 replicates)
data: ppoo_clus_pre_pam_om2_m_clasificaciones
p-value = 0.00102
alternative hypothesis: two.sided
Tampoco resulta significativo en https://adaptivedesignstrial.shinyapps.io/posthoc/
Ahora descartando ASWs negativos
Otra forma de clasificación PPOO con reporte vs. conglomerados (por fila) (excluye ASW neg)
clas_por_run
6623, Primer mes, TSM y Comorbilidad(2)
6612, Primer mes TUS(1)
Desconocido puro
86.3
13.7
Mapuche
82.8
17.2
Ninguno puro
88.4
11.6
Otros reportados (no mapuche)
96.4
3.6
PPOO por cluster
Fisher test (menos los -ASWs)
Fisher's Exact Test for Count Data with simulated p-value (based on
1e+05 replicates)
data: ppoo_clus_pre_pam_om2_m_clasificaciones_sin_asw_neg
p-value = 8e-04
alternative hypothesis: two.sided
PPOO por cluster
2.1.1. Trayectorias
Vemos los gráficos de las trayectorias
Código
categories_pam_om2_m<-attr(States_Wide.seq_month_t_prim_adm_cens, "labels")new_labels <- categories_pam_om2_mnew_labels[which(categories_pam_om2_m =="Otras causas")] <-"Otras\ncausas"#new_labels[which(categories == "Consumo\nde sustancias")] <- "Consumo de\nsustancias"# Creamos un vector con las columnas llenando con NA si faltan valoressil_pam_om_clus2_m <-wcSilhouetteObs(as.dist(dist_month_om), pamRange_month_om$clustering$cluster2, measure="ASW")seq_plot_pam_om2_m <- ggseqplot::ggseqiplot(States_Wide.seq_month_t_prim_adm_cens, group= ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2,facet_ncol=1, facet_nrow=2, sortv=sil_pam_om_clus2_m) +theme(legend.position ="none")+labs(x="Meses", y="# IDs de usuarios")+#guides(fill = guide_legend(nrow = 1))+theme(panel.spacing =unit(0.1, "lines"), # Reduce el espaciado entre los panelesaxis.text.y =element_text(size =15), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =15), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =15), # Tamaño del título del eje Xaxis.title.y =element_text(size =15, margin =margin(r =-10)),#,margin = margin(l = -10)),strip.text =element_text(size =15, margin =margin(b =-15, t=10)),legend.text =element_text(size =15),legend.spacing.x =unit(0.1, 'cm'), # Alinea el título de la leyenda hacia la izquierdalegend.box.margin =margin(t =0, r =0, b =0, l =-50),legend.position ="bottom", legend.justification ="left",panel.spacing.y =unit(0.2, "lines"),plot.margin =margin(10, 10, 10, 10), # Ajusta márgenes globalesstrip.placement ="outside", # Para colocar las tiras fuera de los ejesstrip.background =element_blank() # Elimina el fondo para que parezca más espacioso#legend.key.size = unit(1.5, "lines"), # Aumenta el tamaño de los símbolos en la leyenda )+guides(fill =guide_legend(nrow =1)) +scale_fill_manual(labels = new_labels, values=c("#E2725B", "#556B2F", "#D2B48C",#"#8B4513","#FFFFFF","#808080","#000000"))+scale_color_manual(labels = new_labels, values=c("#E2725B", "#556B2F", "#D2B48C",#"#8B4513","#FFFFFF","#808080","#000000"))seq_plot_pam_om2_m ggsave(filename="_figs/clusters_pam_om2_m_mod_25.png", seq_plot_pam_om2_m, width =11, height =5.5, dpi=1000)
Trayectorias de hospitalización, orden de sujetos según el primer estado observado y su duración, representando a cada individuo como una línea en el gráfico (observaciones ordenadas de acuerdo a ASW)
Código
seq_plot2_pam_om2_m <-ggseqdplot(States_Wide.seq_month_t_prim_adm_cens, group= ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2,facet_ncol=1, facet_nrow=2) +theme(legend.position ="none")+# Colocar la leyenda abajolabs(x="Meses", y="Frecuencia relativa de estados")+theme(panel.spacing =unit(0.1, "lines"),axis.text.y =element_text(size =15), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =15), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =15), # Tamaño del título del eje Xaxis.title.y =element_text(size =15, margin =margin(r =-5)),strip.text =element_text(size =15),panel.spacing.y =unit(0.5, "lines"),strip.placement ="outside", # Para colocar las tiras fuera de los ejesstrip.background =element_blank() # Elimina el fondo para que parezca más espacioso#legend.key.size = unit(1.5, "lines"), # Aumenta el tamaño de los símbolos en la leyenda ) # Colocar la leyenda abajoseq_plot2_pam_om2_mggsave("_figs/clusterspam_om22_m_mod_25.png",seq_plot2_pam_om2_m, width =11, height =5.5, dpi=1000)table_data_pam_om2_m <-sprintf("%1.2f",pamRange_month_om$stats[1,])table_data_pam_om2_m <-as.data.frame(t(table_data_pam_om2_m))colnames(table_data_pam_om2_m)<-attr(pamRange_month_om$stats, "name")table_data_pam_om2_m|> knitr::kable()
PBC
HG
HGSD
ASW
ASWw
CH
R2
CHsq
R2sq
HC
0.16
0.38
0.38
0.40
0.40
833.05
0.11
769.36
0.10
0.49
Trayectorias de hospitalización, frecuencia relativa de estados en un gráfico de barras apiladas por trimestre.
Trayectorias de hospitalización, frecuencia relativa de estados en un gráfico de barras apiladas por trimestre.
De este modo, presenta el cambio agregado en la distribución de estados a lo largo del tiempo, sin considerar las secuencias individuales.
Código
invisible("Definimos las observaciones que tienen siluetas negativas")sil_neg_pam_om_clus2_m <-which(sil_pam_om_clus2_m<0)invisible("A qué conglomerados pertenecen?")table(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[sil_neg_pam_om_clus2_m, "clus_pam_om2"])
clus_pam_om2
6623, Primer mes, TSM y Comorbilidad(2) 6612, Primer mes TUS(1)
171 0
2.1.2.Exploración transiciones
2.1.2.a Transiciones- RM y no RM
Tasas de transición no RM a RM y viceversa
Código
invisible("Tasas de transición no RM a RM y viceversa")trim_tasa_pam_om2_m_cens_cnt<-seqcount_t(States_Wide.seq_month_t_prim_adm_RM_cens, group=ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2)|> dplyr::filter(count>0)|> dplyr::mutate(trans =paste0(from,"_", to))|> dplyr::mutate(across(c("from","to"),~gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .))) trim_tasa_pam_om2_m_cens_rate<-seqtrate_t(States_Wide.seq_month_t_prim_adm_RM_cens, group=ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2)|> dplyr::filter(rate>0)|> dplyr::mutate(trans =paste0(from,"_", to))|> dplyr::mutate(across(c("from","to"),~gsub("\\[->\\s*|\\s*->\\s*\\]|\\[|\\]", "", .)))
Código
trim_tasa_pam_om2_m_cens_rate|> dplyr::left_join(trim_tasa_pam_om2_m_cens_cnt, by=c("from"="from", "glosa_sexo"="glosa_sexo","to"="to"))|> dplyr::rename("recuento"="count")|> dplyr::filter(from %in%c("RM", "noRM"))|>ggplot(aes(x = from, y = to, fill = rate, size=log(recuento+1))) +geom_tile() +coord_flip()+scale_fill_gradient(low ="white", high ="blue") +# Ajusta la escala de colores según tus preferenciaslabs(title ="Tasas de transición, Mes (s/censura)",x ="Desde",y ="Hacia",fill ="Rate") +theme_minimal() +facet_wrap(~glosa_sexo)+theme(axis.text.x =element_text(angle =45, hjust =1))+geom_text(aes(label =sprintf("%1.2f", rate), size =log(recuento+1)*.5), color ="black")invisible("Hay muy pocos casos que se entrecruzan entre noRM y RM (fuera de la diagnonal)")
Porcentajes de transición no-RM y RM por cada cluster
Hay muy pocos casos que se entrecruzan entre noRM y RM (fuera de la diagnonal)
trim_tasa2_pam_om2_m_cens_rate|> dplyr::left_join(trim_tasa2_pam_om2_m_cens_cnt, by=c("from"="from", "glosa_sexo"="glosa_sexo","to"="to"))|> dplyr::rename("recuento"="count")|>#dplyr::filter(from %in% c("RM", "noRM"))|> ggplot(aes(x = from, y = to, fill = rate, size=log(recuento+1))) +geom_tile() +coord_flip()+scale_fill_gradient(low ="white", high ="blue") +# Ajusta la escala de colores según tus preferenciaslabs(title ="Tasas de transición, Mes (s/censura)",x ="Desde",y ="Hacia",fill ="Rate") +theme_minimal() +facet_wrap(~glosa_sexo)+theme(axis.text.x =element_text(angle =45, hjust =1))+geom_text(aes(label =sprintf("%1.2f", rate), size =log(recuento+1)*.5), color ="black")
Porcentajes de transición, transiciones posteriores, por cada cluster
2.1.2.c Tiempo promedio por cluster
Código
seq_mean_t(States_Wide.seq_month_t_prim_adm_cens, group=ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$clus_pam_om2)|> data.table::as.data.table(keep.rowname=T)|> dplyr::mutate(rn=gsub("\\d", "", rn)) |>ggplot(aes(x=rn, fill= factor_inclusivo, y=Mean))+geom_bar(width =1, stat ="identity") +theme_minimal() +facet_wrap(~factor_inclusivo)+labs(title =NULL,x =NULL,y =NULL) +scale_fill_manual(values =rev(c("#D2B48C", "#E27A5B"))) +coord_flip()+theme(#axis.text.x = element_blank(),#axis.text.y = element_blank(),panel.grid =element_blank()) +# scale_fill_brewer(palette = "Pastel1", labels=c("Sin\nautoidentificación\nni reconocimiento", "Autoidentificación\nsin reconocimiento", "Ambas")) +geom_text(aes(label =round(Mean,1)), position =position_stack(vjust =0.5), size =3.5, # Ajusta el tamaño de la fuente aquícolor ="black", # Color del textofamily ="sans", # Puedes cambiar la fuente si lo deseasbackground =element_rect(fill ="white", color =NA)) +# Fondo blancotheme(legend.title =element_blank(), legend.position="none")
Tiempo promedio en cada estado por estatus PPOO (Trimestral c/censura)
Observamos que aquellos en el conglomerado que se encuentra ingresada por trastornos de salud mental tiene un porcentaje levemente mayor de censura.
2.1.3. Comparación variables
2.1.3.a. Comparación covariables- PPOO
Código
ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens|> dplyr::count(clus_pam_om2, factor_inclusivo_real_hist_mas_autperc)|> dplyr::group_by(clus_pam_om2)|> dplyr::mutate(n_prop =paste0(n, " (",scales::percent(n /sum(n), accuracy=.1),")"))|> dplyr::select(-n)|> tidyr::pivot_wider(names_from = factor_inclusivo_real_hist_mas_autperc, values_from = n_prop, values_fill ="0")|> knitr::kable("markdown", col.names=c("Conglomerados","No se identifica/no pertenece", "No se identifica/hay reconocimiento", "Se identifica/hay reconocimeinto"), caption="Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO") # leve mayor identificación y reconocimiento en TUS
Porcentajes por fila, conglomerado vs. Pertenencia/identificación + Reconocimento CONADI PPOO
Conglomerados
No se identifica/no pertenece
No se identifica/hay reconocimiento
Se identifica/hay reconocimeinto
6623, Primer mes, TSM y Comorbilidad(2)
4712 (80.5%)
661 (11.3%)
484 (8.3%)
6612, Primer mes TUS(1)
598 (77.8%)
93 (12.1%)
78 (10.1%)
Vemos las categorías de clasificación de PPOO según autopercepción (en MINSAL y en RSH) y reconocimiento CONADI.
Tampoco se observa asociación alguna. Hicimos una prueba post-hoc usando Bonferroni
2.1.3.b. Comparación covariables- Mortalidad
Código
# invisible("No hay nada, el tiempo promedio de censura es similar")ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens|> dplyr::mutate(death_time_rec=ifelse(death_time==60,0,1))|> janitor::tabyl(clus_pam_om2,death_time_rec)|> dplyr::mutate(`1`=paste0(`1`," (", scales::percent(`1`/(`0`+`1`), accuracy=.1),")"))|> dplyr::left_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens|> dplyr::group_by(clus_pam_om2)|> dplyr::summarise(mean=sprintf("%1.1f",mean(cens_time)),median=sprintf("%1.1f",quantile(cens_time, .5)), p25=sprintf("%1.1f",quantile(cens_time, .25)), p75=sprintf("%1.1f",quantile(cens_time, .75))), by="clus_pam_om2")|> dplyr::select(-`0`)|> knitr::kable("markdown", col.names=c("Conglomerado","Mortalidad observada", "Promedio", "Mediana", "Q1", "Q3"), caption="Post-hoc, conglomerado vs. Mortalidad y tiempo a censura")
Post-hoc, conglomerado vs. Mortalidad y tiempo a censura
Conglomerado
Mortalidad observada
Promedio
Mediana
Q1
Q3
6623, Primer mes, TSM y Comorbilidad(2)
78 (1.3%)
53.8
53.8
50.9
56.5
6612, Primer mes TUS(1)
21 (2.7%)
54.6
54.9
51.6
57.8
Código
# Cargar las librerías necesariaslibrary(survival)library(ggplot2)# Crear la variable de supervivenciasurv_obj <-Surv(time = ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$death_time,event =ifelse(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens$death_time==60,0,1))cat("sin siluetas negativas")
sin siluetas negativas
Código
# Realizar el análisis de Log-Rank (survdiff)survdiff(surv_obj ~ clus_pam_om2,data = ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens)
Call:
survdiff(formula = surv_obj ~ clus_pam_om2, data = ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens)
N Observed Expected
clus_pam_om2=6623, Primer mes, TSM y Comorbilidad(2) 5857 78 87.6
clus_pam_om2=6612, Primer mes TUS(1) 769 21 11.4
(O-E)^2/E (O-E)^2/V
clus_pam_om2=6623, Primer mes, TSM y Comorbilidad(2) 1.05 9.09
clus_pam_om2=6612, Primer mes TUS(1) 8.04 9.09
Chisq= 9.1 on 1 degrees of freedom, p= 0.003
Código
# Chisq= 9.1 on 1 degrees of freedom, p= 0.003 survdiff(Surv(death_time, ifelse(death_time==60,0,1)) ~ clus_pam_om2,data =slice(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens, -sil_neg_pam_om_clus2_m) )
Call:
survdiff(formula = Surv(death_time, ifelse(death_time == 60,
0, 1)) ~ clus_pam_om2, data = slice(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens,
-sil_neg_pam_om_clus2_m))
N Observed Expected
clus_pam_om2=6623, Primer mes, TSM y Comorbilidad(2) 5686 76 85.5
clus_pam_om2=6612, Primer mes TUS(1) 769 21 11.5
(O-E)^2/E (O-E)^2/V
clus_pam_om2=6623, Primer mes, TSM y Comorbilidad(2) 1.06 8.95
clus_pam_om2=6612, Primer mes TUS(1) 7.89 8.95
Chisq= 8.9 on 1 degrees of freedom, p= 0.003
Código
# Chisq= 8.9 on 1 degrees of freedom, p= 0.003 # Ajustar el modelo de Kaplan-Meierkm_fit <-survfit(surv_obj ~ clus_pam_om2,data = ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens)# Extraer los datos del modelo Kaplan-Meier para usar con ggplotkm_data_m <-data.frame(time = km_fit$time,surv = km_fit$surv,upper = km_fit$upper,lower = km_fit$lower,strata =rep(c("6623, Primer mes, TSM y Comorbilidad(2)","6612, Primer mes TUS(1)"), km_fit$strata))biostat3::survRate(Surv(time = death_time,event =ifelse(death_time==60,0,1)) ~ clus_pam_om2, data= ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens) |> dplyr::mutate(across(c("rate", "lower", "upper"),~sprintf("%1.2f",.*10000)))
clus_pam_om2
clus_pam_om2=6623, Primer mes, TSM y Comorbilidad(2) 6623, Primer mes, TSM y Comorbilidad(2)
clus_pam_om2=6612, Primer mes TUS(1) 6612, Primer mes TUS(1)
tstop event rate lower
clus_pam_om2=6623, Primer mes, TSM y Comorbilidad(2) 348073.88 78 2.24 1.77
clus_pam_om2=6612, Primer mes TUS(1) 45240.02 21 4.64 2.87
upper
clus_pam_om2=6623, Primer mes, TSM y Comorbilidad(2) 2.80
clus_pam_om2=6612, Primer mes TUS(1) 7.10
$data
Outcome
Predictor Cases Person-time
Exposed1 21 45240.02
Exposed2 78 348073.88
Total 99 393313.90
$measure
rate ratio with 95% C.I.
Predictor estimate lower upper
Exposed1 1.0000000 NA NA
Exposed2 0.4799882 0.3020483 0.7982259
$p.value
two-sided
Predictor midp.exact wald
Exposed1 NA NA
Exposed2 0.005725614 0.00246084
attr(,"method")
[1] "Median unbiased estimate & mid-p exact CI"
Código
# Crear el gráfico de Kaplan-Meier con ggplot2ggplot(km_data_m, aes(x = time, y = surv, color = strata)) +geom_step(size =1.2) +# Curvas de supervivenciageom_ribbon(aes(ymin = lower, ymax = upper, fill = strata), alpha =0.2, color =NA) +# Intervalos de confianzalabs(title ="Curvas de Kaplan-Meier",x ="Tiempo (meses)",y ="Probabilidad de Supervivencia",color ="Grupo",fill ="Grupo" ) +theme_minimal() +theme(legend.position ="bottom") +scale_color_manual(values =c("#E2725B", "#D2B48C")) +# Colores para las curvasscale_fill_manual(values =c("#E2725B", "#D2B48C")) # Colores para las áreas sombreadas
Código
ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens|> dplyr::mutate(death_time_rec=ifelse(death_time==60,0,1))|> janitor::tabyl(death_time_rec,clus_pam_om2)|> janitor::chisq.test(correct=T)#X-squared = 8.1148, df = 1, p-value = 0.00439ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens|> dplyr::mutate(death_time_rec=ifelse(death_time==60,0,1))|> janitor::tabyl(death_time_rec,clus_pam_om2)|> janitor::fisher.test(simulate.p.value=T, B=1e5)# odds ratio # 2.079773 #p-value = 0.006252cat("Descartando valores negativos en sil width")chisq_cramerv(with(slice(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens, -sil_neg_pam_om_clus2_m)|> dplyr::mutate(death_time_rec=ifelse(death_time==60,0,1)), table(death_time_rec , clus_pam_om2)))# $chisq_statistic# [1] "7.98"# # $chisq_df# df # 1 # # $chisq_p_value# [1] "0.0047"# # $cramers_v# [1] "0.04"#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_##_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_#_tab_cl_mortalidad_pam_om2_m<- ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens|> dplyr::mutate(death_time_rec=ifelse(death_time==60,0,1)) |> janitor::tabyl(death_time_rec,clus_pam_om2) |>as.matrix(ncol=2)labels_pam_om2_m <-c("6623, Primer mes, TSM y Comorbilidad(2)","6612, Primer mes TUS(1)")
Pearson's Chi-squared test with Yates' continuity correction
data: janitor::tabyl(dplyr::mutate(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens, death_time_rec = ifelse(death_time == 60, 0, 1)), death_time_rec, clus_pam_om2)
X-squared = 8.1148, df = 1, p-value = 0.00439
Fisher's Exact Test for Count Data
data: janitor::tabyl(dplyr::mutate(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens, death_time_rec = ifelse(death_time == 60, 0, 1)), death_time_rec, clus_pam_om2)
p-value = 0.006252
alternative hypothesis: true odds ratio is not equal to 1
95 percent confidence interval:
1.212205 3.426554
sample estimates:
odds ratio
2.079773
Descartando valores negativos en sil width$chisq_statistic
[1] "7.98"
$chisq_df
df
1
$chisq_p_value
[1] "0.0047"
$cramers_v
[1] "0.04"
Se constata una asociación muy modesta entre la pertenencia a un conglomerado y mortalidad, siendo 6025, Un trimestre, TUS(1) mayores sus chances de mortalidad.
tab_cluster_region_pam_om2_m<-ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens|> dplyr::mutate(estab_homo_base=as.numeric(estab_homo_base))|> dplyr::inner_join(data_long_establecimiento_2024_std[,c("ESTAB_HOMO", "codigo_region", "nivel_de_atencion", "nivel_de_complejidad")], by =c("estab_homo_base"="ESTAB_HOMO"), multiple ="first")|> janitor::tabyl(codigo_region, clus_pam_om2)|> janitor::adorn_percentages("col")|> janitor::adorn_rounding(digits =2)#colnames(tab_cluster_region_pam_om4_q)<- c("reg", "c1", "c4", "c3", "c5", "c6", "c7", "c8", "c9", "c2")cod_reg_homo_pam_om2_m<-data.frame(codigo_region =1:16,nombre_region =c("Región de Tarapacá","Región de Antofagasta","Región de Atacama","Región de Coquimbo","Región de Valparaíso","Región del Libertador General Bernardo O'Higgins","Región del Maule","Región del Biobío","Región de La Araucanía","Región de Los Lagos","Región de Aysén del General Carlos Ibáñez del Campo","Región de Magallanes y de la Antártica Chilena","Región Metropolitana de Santiago","Región de Los Ríos","Región de Arica y Parinacota","Región de Ñuble" ),stringsAsFactors =FALSE)dplyr::mutate(tab_cluster_region_pam_om2_m, promedio_fila =rowMeans(across(2:length(colnames(tab_cluster_region_pam_om2_m)))))|> dplyr::arrange(desc(promedio_fila))|> dplyr::left_join(cod_reg_homo_pam_om2_m, by="codigo_region")|> dplyr::select(codigo_region, nombre_region, everything())|> dplyr::select(-promedio_fila)|> dplyr::mutate_at(3:(length(colnames(tab_cluster_region_pam_om2_m))+1),~scales::percent(.))|> knitr::kable(caption="Porcentaje por región")
Porcentaje por región
codigo_region
nombre_region
6623, Primer mes, TSM y Comorbilidad(2)
6612, Primer mes TUS(1)
13
Región Metropolitana de Santiago
46%
35%
10
Región de Los Lagos
6%
19%
5
Región de Valparaíso
8%
13%
8
Región del Biobío
10%
8%
9
Región de La Araucanía
5%
4%
6
Región del Libertador General Bernardo O’Higgins
4%
3%
7
Región del Maule
4%
3%
14
Región de Los Ríos
3%
3%
1
Región de Tarapacá
2%
2%
11
Región de Aysén del General Carlos Ibáñez del Campo
pairwise_chisq_gof_test(dplyr::filter(tab_clus_macrozona_pam_om2_m,macrozona!="RM")[-1], p.adjust.method="holm")|> knitr::kable("markdown", caption="Dependencia categórica sol. 2 conglomerados (mensual), por pares de categorías en Macrozona (corrección Holm-Bonferroni)")#0 ****#Groups sharing a letter are not significantlt different (alpha = 0.05)
Dependencia categórica sol. 2 conglomerados (mensual), por pares de categorías en Macrozona (corrección Holm-Bonferroni)
Descriptivos, edad minima de ingreso por conglomerado
Conglomerado
Promedio Desv. Estándar Mediana p025 p975
6623, Primer mes, TSM y Comorbilidad(2)
20.58 (20.58 ± 4.33); 20 [17, 24]
6612, Primer mes TUS(1)
22.38 (22.38 ± 4.32); 23 [18, 26]
Código
dt_ing_calendar_month_t_desde_primera_adm_dedup|> dplyr::filter(month ==0)|> dplyr::inner_join(ing_dt_ing_calendar_month_t_desde_primera_adm_dedup_wide2_cens[,c("run","clus_pam_om2")], by="run")|> dplyr::group_by(clus_pam_om2)|> dplyr::summarise(mean_edad =mean(min_edad_anos),sd=sd(min_edad_anos),ci_lower =mean(min_edad_anos) -qt(0.975, n()-1) *sd(min_edad_anos)/sqrt(n()),ci_upper =mean(min_edad_anos) +qt(0.975, n()-1) *sd(min_edad_anos)/sqrt(n()))|># Plot con ggplot2ggplot(aes(x = clus_pam_om2, y = mean_edad)) +geom_point() +geom_errorbar(aes(ymin = ci_lower, ymax = ci_upper), width =0.2) +labs(title =NULL,x ="Conglomerado",y ="Edad promedio") +theme_minimal()+coord_flip()+theme(#axis.text.x = element_text(angle = 45, hjust = 1),panel.grid =element_blank())+theme(axis.text.y =element_text(size =17, face ="bold"),#,margin = margin(l = 7)), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =17, face ="bold"), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =16, face ="bold"),#,margin = margin(t = -15)), # Tamaño del título del eje Xaxis.title.y =element_text(size =16, face ="bold"), # Tamaño del título del eje Yplot.title =NULL, # Tamaño y estilo del título del gráficolegend.title =element_text(size =17, face ="bold"), # Tamaño del título de la leyendalegend.spacing.y =unit(1.5, "lines"),legend.box.spacing =unit(0.5, "lines"), # Controla el espacio entre la leyenda y el gráficolegend.margin =margin(5, 5, 5, 5), legend.key.height =unit(1, "cm"), legend.text =element_text(size =15, face ="bold") # Tamaño del texto de la leyenda ) ggsave("_figs/edad_minima_por_cluster_pam_om2_m_25.png", dpi=600)
Edad promedio primer ingreso con intervalo de confianza por conglomerado
Two Sample t-test
data: min_edad_anos by clus_pam_om2
t = -10.856, df = 6624, p-value < 2.2e-16
alternative hypothesis: true difference in means between group 6623, Primer mes, TSM y Comorbilidad(2) and group 6612, Primer mes TUS(1) is not equal to 0
95 percent confidence interval:
-2.125952 -1.475625
sample estimates:
mean in group 6623, Primer mes, TSM y Comorbilidad(2)
20.58153
mean in group 6612, Primer mes TUS(1)
22.38231
Cohen's d
d estimate: -0.4164028 (small)
95 percent confidence interval:
lower upper
-0.4919251 -0.3408805
Descartando valores negativos en sil width
Cohen's d
d estimate: -0.4270268 (small)
95 percent confidence interval:
lower upper
-0.5027064 -0.3513472
#dput(attr(t(tab_clus_compl_pam_om7_q),"dimnames")[[1]])# Definir los datos correctamentedata_pam_om2_m <-cbind.data.frame(Grupo=c("6035, Un trimestre, TSM(2)", "6025, Un trimestre, TUS(1)"), PPOO_bin =c(NA, NA), PPOO_sinautoid =c(NA, NA), PPOO_conautoid =c(NA, NA), Mortalidad =c(NA, "+"), RM =c(NA, "-"), `Macrozona-Austral`=c(NA, NA), `Macrozona-Centro`=c(NA, "-"), `Macrozona-Centro Sur`=c(NA, NA), `Macrozona-Norte`=c(NA, "-"), `Macrozona-Sur`=c(NA, "+"), Sexo_mujeres =c(NA, "-"), `Edad ingreso`=c(NA, "+"), `Previsión-FFAA`=c(NA, NA), `Previsión-FONASA A`=c(NA, NA), `Previsión-FONASA BC`=c(NA, NA), `Previsión-FONASA D`=c(NA, NA), `Previsión-ISAPRE`=c(NA, NA), `NivComp-Baja`=c(NA, NA), `NivComp-Media`=c(NA, "+"), `NivComp-Alta`=c(NA, "-"))## Asegurar que los nombres de las columnas sean válidos y no haya espacios en blanco# Derretir el dataframe para que sea adecuado para ggplot2data_melt_pam_om2_m <- reshape2::melt(data_pam_om2_m, id.vars ='Grupo', variable.name ='Variable', value.name ='Asociación')# Reemplazar los NA por un valor vacíodata_melt_pam_om2_m$Asociación[is.na(data_melt_pam_om2_m$Asociación)] <-"\n"# Crear el gráfico con ggplotdata_melt_pam_om2_m|> dplyr::filter(Grupo=="6025, Un trimestre, TUS(1)")|> dplyr::mutate(Variable =gsub("_", " ", Variable))|>ggplot(aes(x = Variable, y = Grupo, fill = Asociación)) +geom_tile(color ="white", size =0.8) +scale_fill_manual(values =c("+"="#556B2F", "-"="#E2725B", "\n"="white")) +labs(title =NULL, x ="Variables", y ="Conglomerado") +theme_minimal() +theme(#axis.text.x = element_text(angle = 45, hjust = 1),panel.grid =element_blank())+theme(axis.text.y =element_text(size =17, face ="bold"),#,margin = margin(l = 7)), # Tamaño de las etiquetas de los grupos étnicosaxis.text.x =element_text(size =17, face ="bold"), # Tamaño de las etiquetas del eje Xaxis.title.x =element_text(size =16, face ="bold"),#,margin = margin(t = -15)), # Tamaño del título del eje Xaxis.title.y =element_text(size =16, face ="bold"), # Tamaño del título del eje Yplot.title =NULL, # Tamaño y estilo del título del gráficolegend.title =element_text(size =17, face ="bold"), # Tamaño del título de la leyendalegend.spacing.y =unit(1.5, "lines"),legend.box.spacing =unit(0.5, "lines"), # Controla el espacio entre la leyenda y el gráficolegend.margin =margin(5, 5, 5, 5), legend.key.height =unit(1, "cm"), legend.text =element_text(size =15, face ="bold") # Tamaño del texto de la leyenda ) +coord_flip()ggsave("_figs/asociaciones_pam_om2_m_25.png", width=8.8*.8, height=5*.8, dpi=1000)